package com.ss.test13;

import java.io.Serializable;
import java.util.AbstractMap;

/**
 * @Auther: 520ljs
 * @Date: 2022/3/17 - 03 - 17 - 22:40
 * HashMap 第一讲 (JDK1.7为主)
 * 具备基础：位运算，继承，接口的实现，数据结构：数组+链表（+红黑树）
 *
 * 1.HashMap的K,V的值，在创建对象的时候确定：K:Integer V:String
 * HashMap的父类 AbstractMap已经实现类Map接口，但是源码中又单独实现了Map接口
 */
public class Test {
}

/*public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>,Cloneable, Serializable {
    //重要属性：
    static final int DEFAULT_INITIAL_CAPACITY = 16;..定义了一个16，一会要赋值给数组的长度
    static final int MAXIMUM_CAPACITY = 1 << 30;//定义了一个很大很大的数
    static final float DEFAULT_LOAD_FACTOR = 0.75f;//定义了一个值：0.75负载因子，加载因子
    transient Entry<K,V>[] table;//底层主数组
    transient int size;//添加的元素的数量
    int threshold;//定义个变量，没赋值默认为0，--->这个变量是用来表示数组扩容的边界值，门槛值
    final float loadFactor;//这个变量用来接收:装填因子，负载因子，加载因子

    //空构造器：
    public HashMap(){
        //this(16.0,75)
        this(DEFAULT_INITIAL_CAPACITY,dEFAULT_LOAD_FACTOR);
    }

    //带参数构造器--->不建议 使用者调用这个构造器
    public HashMap(int initialCapacity, float loadFactor){

        //capacity 一定最终的结果是一个2的整数倍 (2^n)
        int capacity = 1;
        while (capacity < initialCapacity)
            capacity <<= 1;
        //确定了装填因子，负载因子，加载因子：0.75
        this.loadFactor = loadFactor;
        //threshold = capacity * loadFactor = 16 * 0.75 = 12
        //threshold = 12 --->数组的扩容的边界值
        threshold = (int)Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
        //创建主数组，主数组的长度定义为16
        table = new Entry[capacity];
        useAltHashing = sun.misc.VM.isBooted() &&
            (capacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD);
        init();
    }
}*/
